home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / graphics / amicad / arexx_english / zoom.amicad < prev   
Text File  |  1999-12-06  |  5KB  |  196 lines

  1. /* Zoom.AmiCAD, agrandissement ou réduction d'un
  2. ensemble d'objets à un rapport déterminé.
  3. $VER: zoom 1.00e (© R.Florac, 13 Juin 1999) */
  4.  
  5. options results     /* indispensable pour récupérer le résultat des macros */
  6.  
  7. signal on error     /* pour l'interception des erreurs */
  8. signal on syntax
  9.  
  10. 'ASKNUM("Horizontal scale ratio",100)'
  11. rh=result
  12. if result="" then exit
  13. 'ASKNUM("Vertical scale ratio",'rh%1')'
  14. rv=result
  15. if result="" then exit
  16.  
  17. 'COL(0)'; x0=result
  18. 'LINE(0)'; y0=result
  19. x0=(x0%10)*10
  20. y0=(y0%10)*10
  21.  
  22. 'WWIDTH(-1)'; lt=result
  23. 'WIDTH(0)'; l=result
  24. if prop(l,rh)+x0>lt then do
  25.     'MESSAGE("Not enough place"+CHR(10)+"to do this operation"+CHR(10)+"(Horizontal overflow)")'
  26.     exit
  27. end
  28.  
  29. 'WHEIGHT(-1)'; ht=result
  30. 'HEIGHT(0)'; h=result
  31. if prop(h,rv)+y0>ht then do
  32.     'MESSAGE("Not enough place"+CHR(10)+"to do this opération"+CHR(10)+"(Vertical overflow)")'
  33.     exit
  34. end
  35.  
  36. 'FIRSTSEL'; o=result
  37. if o=0 then exit
  38. 'SAVEALL(-1)'
  39. do while o>0
  40.     'COL('o')'; xo=result
  41.     'LINE('o')'; yo=result
  42.     'TYPE('o')'
  43.     select
  44.     when result=1 | result=4 | result=5 | result=6 | result=7 | result=11 | result=12 | result=23 then do
  45.         'HSCALE('o')'; eh=prop(result,rh)
  46.         'VSCALE('o')'; ev=prop(result,rv)
  47.         'SETSCALE('o','eh','ev')'
  48.         xg=prop(xo-x0,rh)
  49.         yh=prop(yo-y0,rv)
  50.         'MOVE('o','x0-xo+xg','y0-yo+yh')'
  51.     end
  52.     when result=2 then do        /* ligne */
  53.         'COORDS('o')'
  54.         parse var result xo ',' yo ',' xf ',' yf
  55.         xg=x0+prop(xo-x0,rh)
  56.         yh=y0+prop(yo-y0,rv)
  57.         xd=x0+prop(xf-x0,rh)
  58.         yb=y0+prop(yf-y0,rv)
  59.         'DELETE('o'):DRAWMODE(1):DRAW('xg','yh','xd','yb')'
  60.         o=o-1
  61.     end
  62.     when result=3 then do        /* Arc */
  63.         'COORDS('o')'
  64.         parse var result xo ',' yo ',' rah ',' rav ',' ad ',' af
  65.         xg=x0+prop(xo-x0,rh)
  66.         yh=y0+prop(yo-y0,rv)
  67.         rah=prop(rah,rh)
  68.         rav=prop(rav,rv)
  69.         'M__=PENWIDTH('o',-1):DELETE('o'):DRAWMODE(-M__):ARC('xg','yh','rah','rav','ad','af')'
  70.         o=o-1
  71.     end
  72.     when result=8 then do        /* pointillés */
  73.         'COORDS('o')'
  74.         parse var result xo ',' yo ',' xf ',' yf
  75.         xg=x0+prop(xo-x0,rh)
  76.         yh=y0+prop(yo-y0,rv)
  77.         xd=x0+prop(xf-x0,rh)
  78.         yb=y0+prop(yf-y0,rv)
  79.         'DELETE('o'):DRAWMODE(0):DRAW('xg','yh','xd','yb')'
  80.         o=o-1
  81.     end
  82.     when result=15 then do        /* ligne double */
  83.         'COORDS('o')'
  84.         parse var result xo ',' yo ',' xf ',' yf
  85.         xg=x0+prop(xo-x0,rh)
  86.         yh=y0+prop(yo-y0,rv)
  87.         xd=x0+prop(xf-x0,rh)
  88.         yb=y0+prop(yf-y0,rv)
  89.         'DELETE('o'):DRAWMODE(2):DRAW('xg','yh','xd','yb')'
  90.         o=o-1
  91.     end
  92.     when result=9 then do        /* bus */
  93.         'COORDS('o')'
  94.         parse var result xo ',' yo ',' xf ',' yf
  95.         xg=x0+prop(xo-x0,rh)
  96.         yh=y0+prop(yo-y0,rv)
  97.         xd=x0+prop(xf-x0,rh)
  98.         yb=y0+prop(yf-y0,rv)
  99.         'DELETE('o'):DRAWMODE(3):DRAW('xg','yh','xd','yb')'
  100.         o=o-1
  101.     end
  102.     when result=10 then do        /* ellipse */
  103.         'COORDS('o')'
  104.         parse var result xo ',' yo ',' rah ',' rav
  105.         xg=prop(xo-x0,rh)
  106.         yh=prop(yo-y0,rv)
  107.         rah=prop(rah,rh)
  108.         rav=prop(rav,rv)
  109.         'DELETE('o'):SETFILL(0):ELLIPSE('x0+xg','y0+yh','rah','rav')'
  110.         o=o-1
  111.     end
  112.     when result=21 then do        /* ligne spéciale */
  113.         'COORDS('o')'
  114.         parse var result xo ',' yo ',' xf ',' yf
  115.         xg=x0+prop(xo-x0,rh)
  116.         yh=y0+prop(yo-y0,rv)
  117.         xd=x0+prop(xf-x0,rh)
  118.         yb=y0+prop(yf-y0,rv)
  119.         'M__=PENWIDTH('o',-1):DELETE('o'):DRAWMODE(-M__):DRAW('xg','yh','xd','yb')'
  120.         o=o-1
  121.     end
  122.     when result=22 then do        /* boîte */
  123.         'COORDS('o')'
  124.         parse var result xo ',' yo ',' xf ',' yf
  125.         xg=x0+prop(xo-x0,rh)
  126.         yh=y0+prop(yo-y0,rv)
  127.         xd=x0+prop(xf-x0,rh)
  128.         yb=y0+prop(yf-y0,rv)
  129.         'M__=PENWIDTH('o',-1):DELETE('o'):SETFILL(0):DRAWMODE(-M__):BOX('xg','yh','xd','yb')'
  130.         o=o-1
  131.     end
  132.     when result=24 then do        /* boîte pleine */
  133.         'COORDS('o')'
  134.         parse var result xo ',' yo ',' xf ',' yf
  135.         xg=x0+prop(xo-x0,rh)
  136.         yh=y0+prop(yo-y0,rv)
  137.         xd=x0+prop(xf-x0,rh)
  138.         yb=y0+prop(yf-y0,rv)
  139.         'DELETE('o'):SETFILL(1):BOX('xg','yh','xd','yb')'
  140.         o=o-1
  141.     end
  142.     when result=25 then do        /* ellipse pleine */
  143.         'COORDS('o')'
  144.         parse var result xo ',' yo ',' rah ',' rav
  145.         xg=prop(xo-x0,rh)
  146.         yh=prop(yo-y0,rv)
  147.         rah=prop(rah,rh)
  148.         rav=prop(rav,rv)
  149.         'DELETE('o'):SETFILL(1):ELLIPSE('x0+xg','y0+yh','rah','rav')'
  150.         o=o-1
  151.     end
  152.     when result=26 then do        /* triangle */
  153.         'COORDS('o')'
  154.         parse var result xo ',' yo ',' x1 ',' y1 ',' x2 ',' y2
  155.         xg=prop(xo-x0,rh)
  156.         yh=prop(yo-y0,rv)
  157.         x1=prop(x1-x0,rh)
  158.         y1=prop(y1-y0,rv)
  159.         x2=prop(x2-x0,rh)
  160.         y2=prop(y2-y0,rv)
  161.         'M__=PENWIDTH('o',-1):DELETE('o'):SETFILL(0):DRAWMODE(-M__):TRIANGLE('x0+xg','y0+yh','x0+x1','y0+y1','x0+x2','y0+y2')'
  162.         o=o-1
  163.     end
  164.     when result=27 then do        /* triangle plein */
  165.         'COORDS('o')'
  166.         parse var result xo ',' yo ',' x1 ',' y1 ',' x2 ',' y2
  167.         xg=prop(xo-x0,rh)
  168.         yh=prop(yo-y0,rv)
  169.         x1=prop(x1-x0,rh)
  170.         y1=prop(y1-y0,rv)
  171.         x2=prop(x2-x0,rh)
  172.         y2=prop(y2-y0,rv)
  173.         'DELETE('o'):SETFILL(1):TRIANGLE('x0+xg','y0+yh','x0+x1','y0+y1','x0+x2','y0+y2')'
  174.         o=o-1
  175.     end
  176.     otherwise nop
  177.     end
  178.     'NEXTSEL('o')'; o=result
  179. end
  180. exit
  181.  
  182. /* Calcul d'un pourcentage */
  183. prop: procedure
  184.     parse arg v,p
  185.     return (v*p)%100
  186.  
  187. /* Traitement des erreurs, interruption du programme */
  188. syntax:
  189. erreur=RC
  190. 'MESSAGE("Script Zoom.AmiCAD"+CHR(10)+"Syntax error"+CHR(10)+"in line 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
  191. exit
  192.  
  193. error:
  194. 'MESSAGE("Script Zoom.AmiCAD"+CHR(10)+"Error in line 'SIGL'")'
  195. exit
  196.